//MQTT系列https://zhuanlan.zhihu.com/p/79455828
//MQTT比TCP协议好在哪儿？https://www.zhihu.com/question/23373904
#include<SoftwareSerial.h>
#include<Arduino.h>
#define WIFI_UART   espSerial
SoftwareSerial espSerial(2, 3);//第一个RX,第二个TX
bool doCmdOk(String data,char *keyword)
{
  bool result = false;
  if (data != "")   //对于tcp连接命令，直接等待第二次回复
  WIFI_UART.println(data); //发送AT指令
  if (data == "AT")   //检查模块存在
    delay(2000);
  else
    while (!WIFI_UART.available());  // 等待模块回复
  //配置 MQTT 用户属性过程中，在收到esp8266信号后不要有延迟delay，已踩坑
  if (WIFI_UART.find(keyword))   //返回值判断
  result = true;
  else
  result = false;
  while (WIFI_UART.available())WIFI_UART.read();   //清空串口接收缓存
  delay(500); //指令时间间隔
  return result;
}
bool doCmdOkS(char *keyword,int a)
{
  bool result = false;
  //WIFI_UART.println("AT+MQTTPUB=0,\"$oc/devices/621b6649e68aa647c0887de7_feifei/sys/properties/report\",\"{\\\"services\\\":[{\\\"service_id\\\":\\\"seson\\\"\\\,\\\"properties\\\":{\\\"angle\\\":%d}}]}\",0,0",2); //发送AT指令
  //WIFI_UART.println("AT+MQTTPUB=0,\"$oc/devices/621b6649e68aa647c0887de7_feifei/sys/properties/report\",\"角度=%d\",0,0",a); //发送AT指令
  while (!WIFI_UART.available());  // 等待模块回复
  //配置 MQTT 用户属性过程中，在收到esp8266信号后不要有延迟delay，已踩坑
  if (WIFI_UART.find(keyword))   //返回值判断
  result = true;
  else
  result = false;
  while (WIFI_UART.available())WIFI_UART.read();   //清空串口接收缓存
  delay(500); //指令时间间隔
  return result;
}
void witch(int x, char *y)
{
  if (x == 1)
    Serial.println(y);
  else
    Serial.println("失败");
}
void witchS(int M, char *N)
{
  if (N == 1)
    Serial.println(M);
}

void setup()
{
  Serial.begin(9600);      //串口波特率
  espSerial.begin(9600);// esp8266 01波特率
  witch(doCmdOk("AT\r\n", "OK"), "AT模式"); //OK是AT指令的返回值，如果返回值为1就写1
  //AT
  witch(doCmdOk("AT+CWMODE=3\r\n", "OK"), "WIFI模式设置成功"); //设置 ESP设备的 Wi-Fi模式
  //AT+CWMODE=3
  witch(doCmdOk("AT+CWJAP=\"名字\",\"密码\"\r\n", "OK"), "连接WiFi成功"); //wifi名和密码
  //AT+CWJAP="我的0","12345679"//12345787
  witch(doCmdOk("AT+CIPSNTPCFG=1,8,\"ntp1.aliyun.com\"\r\n", "OK"), "设置SNTP服务器成功");
  //AT+CIPSNTPCFG=1,8,"cn.pool.ntp.org"
  //‘ntp1.aliyun.com’是阿里云的SNTP服务器，SNTP：简单网络时间协议（Simple Network Time Protocol）https://www.cnblogs.com/Summer6/p/12792146.html
}
void loop()
{
  if (Serial.available())
    espSerial.write(Serial.read());
  if (espSerial.available())
    Serial.write(espSerial.read());
  int a[20];
  for (int i=0;i<20;i++)
  a[19]=i;
  doCmdOkS("OK",a);
}
